home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / newmake.arc / TOKEN.C < prev    next >
Encoding:
C/C++ Source or Header  |  1986-09-21  |  1.4 KB  |  84 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include "make.h"
  4.  
  5. /*
  6.  * Get next token from the string.  Return a pointer to it, or NULL.
  7.  * Adjust pointer to point to next part of string.
  8.  * The string is modified.
  9.  * A token consists of any number of non-white characters.
  10.  */
  11. char *token(strpp)
  12. char **strpp;
  13. {
  14.     char *s, *beg;
  15.  
  16.     stripwh(strpp);
  17.     if(!**strpp) return NULL;
  18.  
  19.     beg = s = *strpp;
  20.     while(*s && !isspace(*s)) ++s;
  21.     if(*s) *s++ = '\0';
  22.     *strpp = s;
  23.     return beg;
  24. }
  25.  
  26.  
  27. /*
  28.  * Parse character escape-sequences in a line of text.
  29.  *    <EscChar><EscChar> = <EscChar>
  30.  *    <EscChar>n = newline, and so on
  31.  *    <EscChar><char> = <char>
  32.  * The string is truncated at the first non-escaped occurance of 'comchar'.
  33.  */
  34. escape(str, comchar)
  35. char *str, comchar;
  36. {
  37.     char *d, c;
  38.  
  39.     for(d = str; *str && *str != comchar; ++str)
  40.         if(*str == ESCCHAR && *(str + 1)) switch((c = *++str))
  41.         {
  42.            case ESCCHAR:
  43.             *d++ = ESCCHAR;
  44.             break;
  45.  
  46.            case 'n':
  47.             *d++ = '\n';
  48.             break;
  49.  
  50.            case 'r':
  51.             *d++ = '\r';
  52.             break;
  53.  
  54.            case 't':
  55.             *d++ = '\t';
  56.             break;
  57.  
  58.            case 'b':
  59.             *d++ = '\b';
  60.             break;
  61.  
  62.            case 'f':
  63.             *d++ = '\f';
  64.             break;
  65.  
  66.            default:
  67.             *d++ = c;
  68.             break;
  69.         } else *d++ = *str;
  70.  
  71.     *d++ = 0;
  72. }
  73.  
  74.  
  75. stripwh(strpp)
  76. char **strpp;
  77. {
  78.     char *s;
  79.  
  80.     s = *strpp;
  81.     while(isspace(*s)) ++s;
  82.     return (*strpp = s);
  83. }
  84.